// 引入公共功能
const {
    checkdatas,
    searchSql,
    updateSql
} = require('../until/until');
const {
    getDataBySQL
} = require('../../back/DB/db');
const {
    countPage
} = require('../until/config');
// 实现用户管理的业务代码
class Uums {
    // 1.注册业务
    /**
     * user{username:'用户名',pwd:'密码'}
     */
    async reguest({
        username,
        pwd
    }) {
        // 第一步，校验数据有效性
        if (checkdatas(username) || checkdatas(pwd)) {
            return {
                status: 201,
                msg: '用户名或密码不合法！'
            };
        } else {
            // 开始引入数据和数据库交互
            // 注册使用sql语句
            let sql = `insert user2(username,pwd) value(?,?)`;
            let [err, result] = await getDataBySQL(sql, [username, pwd]);
            if (err) {
                if (err.message.includes('Duplicate entry')) {
                    return {
                        status: 201,
                        msg: '用户名已存在！'
                    };
                } else {
                    return {
                        status: 201,
                        msg: '注册失败，请联系管理员！'
                    };
                }
            } else {
                if (result.affectedRows > 0) {
                    return {
                        status: 200,
                        msg: '注册成功！'
                    };
                } else {
                    return {
                        status: 201,
                        msg: '注册失败！'
                    };
                }
            }
        }
    };
    // 2.登录业务
    /**
     * user {username:'用户名'，pwd:'密码'}
     */
    async loginon({
        username,
        pwd
    }) {
        // 使用sql语句，查询指定数据
        let sql = `select * from user2 where username=? and pwd=?`
        let [err, result] = await getDataBySQL(sql, [username, pwd]);
        if (err) {
            return {
                status: 200,
                msg: '登录失败，请联系管理员！'
            };
        } else {
            if (result.length > 0) {
                return {
                    status: 200,
                    msg: '登录成功！',
                    username
                };
            } else {
                return {
                    status: 201,
                    msg: '登录失败!'
                };
            }

        }
    };
    // 3.获取全部页码路由
    // async getUserList() {
    //     let sql = `select * from user2`;
    //     let [err, result] = await getDataBySQL(sql);
    //     if (err) {
    //         return {
    //             status: 201,
    //             msg: '获取用户列表失败！'
    //         };
    //     } else {
    //         if (result.length > 0) {
    //             return {
    //                 status: 200,
    //                 msg: '用户列表！',
    //                 userlist: result
    //             };
    //         } else {
    //             return {
    //                 status: 201,
    //                 msg: '暂无用户数据！'
    //             };
    //         }
    //     }
    // };
    // 4.根据页码和搜索内容获取用户列表数据
    /**
     * page 页码
     * searchText 搜索内容
     */
    async searchJson({
        page,
        searchText
    }) {
        page=page*1;
        // 判断当前参数是否是数字
        if (!Number.isInteger(page) || page * 1 < 1) {
            page = 1;
        }
        // 定义一个拼接变量
        let searchTextsql = '';
        if (!checkdatas(searchText) && Object.keys(searchText).length > 0) {
            searchTextsql = searchSql(searchText);
        }
        //查询数据库中是否有数据（数据总个数）
        let sql = `select count(*) as countSum from user2 ${searchTextsql}`;
        let [err, result] = await getDataBySQL(sql);
        if (err) {
            return {
                status: 201,
                msg: '暂无该条件数据，请联系管理员!'
            };
        } else {
            if (result.length > 0) {
                // 每页显示的条数
                // 获取总条数
                let countSum = result[0].countSum;
                // 计算总页面数
                let pageSum = Math.ceil(countSum / countPage);
                // 以分页的形式获取参数
                let sql1 = `select * from user2 ${searchTextsql} limit ${(page-1)*countPage},${countPage}`;
                let [err1, result1] = await getDataBySQL(sql1);
                if (err1) {
                    return {
                        status: 201,
                        msg: '暂无数据内容，请联系管理员！'
                    };
                } else {
                    if (result1.length > 0) {
                        return {
                            status: 200,
                            msg: '搜索分页用户列表',
                            datalist: {
                                userlist: result1,
                                page,
                                countPage,
                                countSum,
                                pageSum
                            }
                        };
                    } else {
                        return {
                            status: 201,
                            msg: '暂无数据内容！'
                        };
                    }
                }
            } else {
                return {
                    status: 201,
                    msg: '暂无该数据条件！'
                };
            }
        }
    };
    // 5.删除用户业务
    /**
     * userid 用户ID
     */
    async delUserid({
        userid
    }) {
        let sql = `delete from user2 where userid=?`;
        let [err, result] = await getDataBySQL(sql, [userid]);
        if (err) {
            return {
                status: 201,
                msg: '删除失败！,暂无该ID数据，请联系管理员！'
            }
        } else {
            if (result.affectedRows > 0) {
                return {
                    status: 200,
                    msg: '删除成功！'
                };
            } else {
                return {
                    status: 201,
                    msg: '删除失败，暂无该ID数据！'
                };
            }
        }
    }

    // 6.修改用户数据
    /**
     * user {userid,[username,pwd,isadmin]}
     */
    async updateJson(user) {
        let userid = user.userid;
        delete user.userid;
        let sql = `update user2 set ${updateSql(user)} where userid=?`;
        let [err, result] = await getDataBySQL(sql, [userid]);
        if (err) {
            if (err.message.includes('Duplicate entry')) {
                return {
                    status: 201,
                    msg: '修改失败，用户名已存在！'
                };
            } else {
                console.log(err);
                return {
                    status: 201,
                    msg: "修改数据失败，请联系管理员"
                };
            }
        } else {
            if (result.affectedRows > 0) {
                return {
                    status: 200,
                    msg: '修改成功!'
                };
            } else {
                return {
                    status: 201,
                    msg: '修改失败,ID输入有误，请再次确认'
                };
            }
        }
    };
};
module.exports = new Uums();